/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package minimundo.comercio;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import minimundo.social.Pessoa;

/**
 *
 * @author Valdirene
 */
public class Funcionario {
    private Pessoa pessoa;
    private Date dataAdmissao;
    private Date dataDemissao;
    //private Profissao profissao;
    private double salario;
    //private Cargo cargo;
    private boolean carteiraAssinada;
    private List<String> beneficios = new ArrayList<String>();
    private List<String> descricaoDoDescontos = new ArrayList<String>();
    private double comisssao;
    private double descontos;

    /**
     * @return Retorna o pessoa que é funcionario
     */
    public Pessoa getPessoa() {
        return pessoa;
    }

    /**
     * @param Define a pessoa que é funcionário
     */
    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    /**
     * @return Retorna a data de admissão
     */
    public Date getDataAdmissao() {
        return dataAdmissao;
    }

    /**
     * @param Define a data de admissão
     */
    public void setDataAdmissao(Date dataAdimissao) {
        this.dataAdmissao = dataAdimissao;
    }

    /**
     * @return Retorna a data de demissão
     */
    public Date getDataDemissao() {
        return dataDemissao;
    }

    /**
     * @param Define a data de demissão
     */
    public void setDataDemissao(Date dataDemissao) {
        this.dataDemissao = dataDemissao;
    }

    /**
     * @return Retorna o salário
     */
    public double getSalario() {
        return salario;
    }

    /**
     * @param Define o salário
     */
    public void setSalario(double salario) {
        if(salario > 0)
            this.salario = salario;
        else
            System.out.println("Você não pode definir um salário negativo.");
    }

    /**
     * @return Retorna se o funcionário trabalha de carteria assinada ou não
     */
    public boolean isCarteiraAssinada() {
        return carteiraAssinada;
    }

    /**
     * @param Define se o funcionário vai trabalhar de carteira assinada ou não
     */
    public void setCarteiraAssinada(boolean carteiraAssinada) {
        this.carteiraAssinada = carteiraAssinada;
    }

    /**
     * @return Retorna um lista com a descrição dos benefícios do funcionário
     */
    public List<String> getBeneficios() {
        return beneficios;
    }

    /**
     * @param Adiciona um benefício na lista de benefícios do funcionário
     */
    public void setBeneficio(String beneficio, double valor) {
        if(!beneficios.contains(beneficio))
        {
            if(valor > 0)
            {
                beneficios.add(beneficio);
            }
            else
            {
                System.out.println("Você não pode adiciona um valor negativo ao benefícios. Para isso terá que definir em descontos.");
            }
        }
        else
        {
            System.out.println("Esse benefício já foi definido para esse funcionário.");
        }
    }
    /**
     *
     * @param Remove um benefício da lista de benefícios
     */
    public void removerBeneficio(String beneficio)
    {
        if(beneficios.contains(beneficio))
        {
            beneficios.remove(beneficio);
        }
        else
        {
            System.out.println("Esse usuário não tinha esse benefício.");
        }
    }
    /**
     *
     * @return Retorna uma lista com informação sobre os descontos
     */
    public List<String> getDescricaoDosDescontos()
    {
        return descricaoDoDescontos;
    }

    /**
     *
     * @param Adiciona um descrição de desconto da lista de descrições de desconto
     */
    public void setDescricaoDeDesconto(String descricao)
    {
        if(!descricaoDoDescontos.contains(descricao))
        {
            descricaoDoDescontos.add(descricao);
        }
        else
        {
            System.out.println("Essa descrição não havia sido cadastrada.");
        }
    }

    /**
     *
     * @return Retorna o valor dos descontos
     */
    public double getDescontos()
    {
        return descontos;
    }

    /**
     *
     * @param Adiciona um desconto
     */
    public void setDesconto(double valor)
    {
        if(valor > 0)
        {
            descontos += valor;
        }
        else
        {
            System.out.println("Não é preciso colocar o desconto com valor negativo. Mas o sistema corrigiu automaticamente.");
            valor = valor * (-1);
            descontos += valor;
        }
    }

    /**
     *
     * @return Retorna quanto o funcioário irá ganhar de comissão
     */
    public double getComissao()
    {
        return comisssao;
    }

    /**
     *
     * @param Adiciona um valor na comissão que o funcionário irá receber
     */
    public void setComissao(double valor)
    {
        if(valor > 0)
            comisssao += valor;
        else
            System.out.println("Você não pode colocar uma comissão com valor negativo");
    }

}
